Utilizzo di MC_DigitalCamSwitch_HighPrecision
L'esempio BasicMotion_DigitalCamSwitch_HighPrecision.project si trova nella directory di installazione CODESYS sotto ..\CODESYS SoftMotion\Examples.
Questo esempio mostra come utilizzare gli output di SMC_DigitalCamSwitch_HighPrecision per controllare le uscite digitali con alta risoluzione temporale. I terminali EL2258 ed EL2252 di Beckhoff sono usati
Avviso
Le descrizioni dei dispositivi di Beckhoff non sono incluse nell'esempio. È possibile scaricarli direttamente dal fornitore e installarli nel repository dei dispositivi. Per eseguire l'esempio, sono necessari un accoppiatore bus EK1100, un terminale EL2258 e un terminale EL2252
Importante
Questo esempio è stato sviluppato e testato secondo la revisione 0017 di EL2258 e la revisione 0020 di EL2252. Serve solo come esempio. Non garantiamo la correttezza. Il codice sorgente deve essere testato prima dell'uso. Se necessario, deve essere modificato con altre revisioni dei terminali
Struttura dell'applicazione
L'applicazione è composta da Main programma, DigitalCamSwitch_EL2258 e DigitalCamSwitch_EL2252 blocchi funzionali e un accoppiatore bus EK1100 con terminali di uscita EL2258 ed EL2252.
Le DigitalCamSwitch_EL2258 e DigitalCamSwitch_EL2252 blocchi funzionali sono le parti essenziali dell'esempio. Mostrano come usare il Events uscita di SMC_DigitalCamSwitch_HighPrecision per programmare uscite digitali. I blocchi funzionali devono essere intesi come esempi che possono essere adattati ad altro hardware
DigitalCamSwitch_EL2258
Il blocco funzione viene inizializzato su un bordo ascendente in corrispondenza del
Enableinput.STATE_INIT_0eSTATE_INIT_1afferma, ilOutputBufferReseti segnali del terminale EL2258 vengono scritti eaLastEventIdsl'array è inizializzato. L'ID dell'ultimo evento elaborato per ogni traccia viene salvato in questo array. Ciò impedisce che un evento venga trasferito più volte al terminale.Una volta inizializzato (
STATE_ACTIVE), tutte le tracce vengono elaborate a turno e per ciascuna traccia viene eseguita la seguente logica:Verificate se il terminale EL2258 ha già accettato gli ultimi eventi comandati (
ChannelsIn[channel].OutputOrderFeedback = ChannelsOut[channel].OutputOrderCounter).Ripeti tutti gli eventi della traccia. Solo quegli eventi di cui
ToggleEventIdè maggiore dell'ultimo ID elaborato viene considerato ulteriormente. (InterrogazioneEventId_GreaterThan(event^.ToggleEventId, aLastEventIds[channel]))Vedi sezione: «Nota sull'ordine degli eventi».
Convertire il
Durationdell'evento in un timestamp EtherCAT e corrispondente scrittura delChannelsOut[channel].OutputEventStateeChannelsOut[channel].OutputEventTimeuscite.Interrompe l'elaborazione dopo un massimo di 5 eventi.
Notifica al terminale che esistono nuovi eventi se è stato trovato almeno un evento (
ChannelsOut[channel].OutputOrderCounter := ChannelsOut[channel].OutputOrderCounter + 1).
Nota sull'ordine dell'evento
Gli eventi vengono restituiti dal SMC_DigitalCamSwitch_HighPrecision blocco funzionale per ogni traccia in un array. SwitchNumber e un ToggleEventId vengono restituiti per ogni evento. ToggleEventId è unico e crescente per ogni traccia.
Per ulteriori informazioni, vedere: SMC_CAMSWITCH_TOGGLE_EVENT.
Nell'esempio, aLastEventIds[trackNo] l'array memorizza per ogni traccia che ToggleEventId è stato trasferito l'ultima volta al terminale in una precedente chiamata al blocco funzione. Perché il ToggleEventIds sono in ordine crescente, la chiamata successiva saprà esattamente quali eventi devono ancora essere trasferiti.
Perché non è noto in quale
ToggleEventIdgli eventi iniziano, avalidil flag viene salvato inEventIdtipo di dati oltre all'ID.EventId_GreaterThanconfronto, questovalidla bandiera viene presa in considerazione di conseguenza.Le
ToggleEventIdshanno il tipo di dati a 32 bitUDINTe può quindi, in linea di principio, traboccare con una durata rispettivamente lunga o un'elevata frequenza di commutazione. Il valore passa quindi da 2^32-1 a 0. La funzione di confrontoEventId_GreaterThantiene conto anche degli overflow a 32 bit.
Mappatura PDO EL2258
Le ChannelsOut e ChannelsIn uscite di DigitalCamSwitch_EL2258 i blocchi funzione sono collegati ai rispettivi canali I/O del terminale EL2258. L'immagine seguente mostra le mappature per il canale 1. Il canale 2 è simile; solo ChannelsOut e ChannelsIn l'indice è 2, non 1.

DigitalCamSwitch_EL2252
Il principio di base è identico a DigitalCamSwitch_EL2258. La differenza sta nel modo in cui i segnali vengono scritti perché il terminale EL2252 può programmare un solo evento attivo
Innanzitutto, il blocco funzione viene inizializzato in
STATE_INIT.Poi
STATE_CHECK_FOR_EVENTcontrolla se gli eventi diSMC_DigitalCamSwitch_HighPrecisioni blocchi funzionali sono in sospeso.Se un evento è disponibile, deve essere programmato entro due cicli:
Le uscite e il timestamp EtherCAT vengono scritti nel primo ciclo. Le
Activatel'uscita è impostata su 0.Nel secondo ciclo, il
Activatel'uscita è impostata su 3 polliciSTATE_ACTIVATE_EVENT_IN_EL2252. Questo attiva l'evento nel terminale
Nel
STATE_WAIT_UNTIL_THE_INPUTS_MATCH_THE_OUTPUTSil sistema attende quindi che l'evento sia stato eseguito. I segnali provenienti daFeedbacka tale scopo vengono utilizzati gli input del terminale.
Mappatura PDO EL2252

Main
Nel programma principale, sono configurati quattro interruttori (due su ogni traccia). Le tracce hanno anche diverse compensazioni on/off (OnComp, OffComp):

Il programma include le chiamate ai blocchi funzionali necessarie per attivare una previsione per l'asse e spostarlo costantemente a 180°/s (*), nonché per SMC_DigitalCamSwitch_HighPrecision, DigitalCamSwitch_EL2258e DigitalCamSwitch_EL2252. Prima di iniziare il movimento, il bus di campo deve essere completamente acceso. Altrimenti gli eventi non possono essere trasmessi al terminale
(*) È stato scelto un movimento costante per mantenere l'esempio semplice e chiaro. Tuttavia, SMC_DigitalCamSwitch_HighPrecision il blocco funzionale funziona con tutti i tipi di movimenti. Ad esempio, fornisce anche timestamp esatti durante una fase di accelerazione o
Messa in servizio
Crea l'applicazione e scaricala su un controller.
Avviare l'applicazione.